package cc.loach.homekit.app.homekit.translators;

import android.app.Activity;
import android.widget.ImageView;

import cc.loach.homekit.app.R;
import cc.loach.homekit.hap.controlled.device.loach._lightbulb._light.HapLight;
import io.vertx.core.Future;
import io.vertx.core.impl.logging.Logger;
import io.vertx.core.impl.logging.LoggerFactory;

/**
 * HapLight指令翻译，处理来自iPhone的控制指令
 */
public class HapLightTranslator extends HapLight {

    private static final String TAG = HapLightTranslator.class.getSimpleName();
    private static final Logger logger = LoggerFactory.getLogger(TAG);

    // 灯的开关
    private boolean On_Off_Value = false;

    public HapLightTranslator(String did, Activity activity, ImageView imageView) {
        super(did);

        // 固件版本
        _accessoryInformation()._firmwareRevision().setValue("1.0.0");
        _accessoryInformation()._firmwareRevision()
                .doGet(() -> {
                    // TODO: 取设备的固件版本
                    return Future.succeededFuture("1.0.0");
                });

        // 制造商
        _accessoryInformation()._manufacturer().setValue("loach");
        _accessoryInformation()._manufacturer()
                .doGet(() -> {
                    // TODO: 取设备的制造商信息
                    return Future.succeededFuture("locah");
                });

        // 型号
        _accessoryInformation()._model().setValue("test");
        _accessoryInformation()._model()
                .doGet(() -> {
                    // TODO: 取设备的型号
                    return Future.succeededFuture("test");
                });

        // 名称
        _accessoryInformation()._name().setValue("");
        _accessoryInformation()._name()
                .doGet(() -> {
                    // TODO: 取设备的名称
                    return Future.succeededFuture("");
                });

        // 序列号
        _accessoryInformation()._serialNumber().setValue(did);
        _accessoryInformation()._serialNumber()
                .doGet(() -> {
                    // TODO: 取设备的序列号
                    return Future.succeededFuture(did);
                });

        // identify
        _accessoryInformation()._identify()
                .doSet(value -> {
                    logger.info("_identify");
                    // TODO: 可以用闪灯来实现
                    return Future.succeededFuture();
                });

        // 开关
        _lightbulb()._on().setValue(On_Off_Value); // 初始化开关的值
        _lightbulb()._on()
                .doGet(() -> {
                    // TODO: 取开关的值
                    return Future.succeededFuture(On_Off_Value);
                })
                .doSet((value) -> {
                    // TODO: 控制灯的开或关, value为ture开灯, value为false关灯
                    if (value) {
                        activity.runOnUiThread(() -> imageView.setImageResource(R.drawable.baseline_lightbulb_on_24));
                    } else {
                        activity.runOnUiThread(() -> imageView.setImageResource(R.drawable.baseline_lightbulb_off_24));
                    }

                    On_Off_Value = value;

                    return Future.succeededFuture();
                });

        // 协议版本，只能是1.1.0，不要修改此值。
        _protocolInformation()._version().setValue("1.1.0");
        _protocolInformation()._version()
                .doGet(() -> Future.succeededFuture("1.1.0"));

        // TODO: 如果监听到灯的开关变化了
        imageView.setOnClickListener(x -> {
            On_Off_Value = !On_Off_Value;

            // 调用如下的语句，会自动发送状态给iPhone
             _lightbulb()._on().setValue(On_Off_Value);
             _lightbulb()._on()._doChange(On_Off_Value);
        });
    }
}
